// 用户服务
import api from './request.js';
import goApi from './goApi.js';

class UserService {
  constructor() {
    this.currentUser = null;
    this.inviteCode = null;
  }

  // 用户登录
  async login(address, inviteCode = '') {
    try {
      const data = {
        dizhi: address,
        yqm: inviteCode
      };
      
      const opts = {
        url: '/user/Userlogin',
        method: 'POST'
      };
      
      const res = await api.httpRequest(opts, data);
      
      if (res[1].data.state === 'success') {
        // 保存token
        uni.setStorageSync("token", JSON.stringify(res[1].data.token));
        
        // 获取用户信息
        await this.getUserInfo();
        
        return {
          success: true,
          token: res[1].data.token
        };
      } else {
        return {
          success: false,
          error: res[1].data.msg || '登录失败'
        };
		
      }
    } catch (error) {
      console.error('登录失败:', error);
      return {
        success: false,
        error: error.message || '登录失败'
      };
    }
  }

  // 获取用户信息
  async getUserInfo() {
    try {
      const data = {};
      const opts = {
        url: '/user/GetUserInfo',
        method: 'GET'
      };
      
      const res = await api.httpTokenRequest(opts, data);
      console.log('旧用户信息',res);
      if (res[1].data.state === 'success') {
        const userInfo = res[1].data.list[0];
        this.currentUser = userInfo;
        uni.setStorageSync('userinfo', this.currentUser);
		
        
        // 如果用户信息中包含yqm字段，直接设置邀请码
        if (this.currentUser && this.currentUser.yqm) {
          this.inviteCode = this.currentUser.yqm;
          uni.setStorageSync('yqm', this.inviteCode);
        }
        
        return {
          success: true,
          userInfo: this.currentUser
        };
      } else {
        return {
          success: false,
          error: res[1].data.msg || '获取用户信息失败'
        };
      }
    } catch (error) {
      console.error('获取用户信息失败:', error);
      return {
        success: false,
        error: error.message || '获取用户信息失败'
      };
    }
  }

  // 获取邀请码（从用户信息中获取yqm字段）
  async getInviteCode() {
    try {
      // 如果当前用户信息中已有yqm字段，直接使用
      if (this.currentUser && this.currentUser.yqm) {
        this.inviteCode = this.currentUser.yqm;
        uni.setStorageSync('yqm', this.inviteCode);
        return {
          success: true,
          inviteCode: this.inviteCode
        };
      }
      
      // 如果当前用户信息中没有yqm字段，尝试从缓存中获取
      const cachedYqm = uni.getStorageSync('yqm');
      if (cachedYqm) {
        this.inviteCode = cachedYqm;
        return {
          success: true,
          inviteCode: this.inviteCode
        };
      }
      
      // 如果缓存中也没有，返回失败，不调用getUserInfo避免循环
      return {
        success: false,
        error: '用户信息中未找到邀请码，请先获取用户信息'
      };
    } catch (error) {
      console.error('获取邀请码失败:', error);
      
      // 如果获取失败，尝试从缓存中获取
      const cachedYqm = uni.getStorageSync('yqm');
      if (cachedYqm) {
        this.inviteCode = cachedYqm;
        return {
          success: true,
          inviteCode: this.inviteCode
        };
      }
      
      return {
        success: false,
        error: error.message || '获取邀请码失败'
      };
    }
  }

  // 刷新用户数据（包括用户信息和邀请码）
  async refreshUserData() {
    try {
      const userInfoResult = await this.getUserInfo();
      if (userInfoResult.success) {
        return {
          success: true,
          userInfo: userInfoResult.userInfo,
          inviteCode: this.inviteCode
        };
      } else {
        return userInfoResult;
      }
    } catch (error) {
      console.error('刷新用户数据失败:', error);
      return {
        success: false,
        error: error.message || '刷新用户数据失败'
      };
    }
  }

  // 清除用户数据
  clearUserData() {
    this.currentUser = null;
    this.inviteCode = null;
    uni.removeStorageSync('token');
    uni.removeStorageSync('userinfo');
    uni.removeStorageSync('yqm');
  }

  // 获取当前用户信息
  getCurrentUser() {
    return this.currentUser;
  }

  // 获取当前邀请码
  getCurrentInviteCode() {
    return this.inviteCode;
  }

  // 检查是否已登录
  isLoggedIn() {
    const token = uni.getStorageSync('token');
    return !!token;
  }

  // ========== Go API 相关方法 ==========
  
  // Go API 测试登录（绕过签名验证）
  async goLogin(address, inviteCode = '') {
    try {
      const data = {
        address: address,
        invite_code: inviteCode
      };
      
      const opts = {
        url: '/api/test-login',
        method: 'POST'
      };
      
      const res = await goApi.goHttpRequest(opts, data);
      
      if (res[1].data.state === 'success') {
        // 保存token
        uni.setStorageSync("token", JSON.stringify(res[1].data.token));
        
        // 获取用户信息
        await this.getUserInfo();
        
        return {
          success: true,
          token: res[1].data.token,
          msg: res[1].data.msg
        };
      } else {
        return {
          success: false,
          error: res[1].data.msg || '登录失败'
        };
      }
    } catch (error) {
      console.error('Go API 登录失败:', error);
      return {
        success: false,
        error: error.message || '登录失败'
      };
    }
  }

  // Go API 签名登录
  async goLoginWithSignature(address, message, signature, inviteCode = '') {
    try {
      const data = {
        address: address,
        message: message,
        signature: signature,
        invite_code: inviteCode
      };
      
      const opts = {
        url: '/api/login',
        method: 'POST'
      };
      
      const res = await goApi.goHttpRequest(opts, data);
      
      console.log('🔍 Go API 登录响应:', JSON.stringify(res));
      console.log('🔍 响应数据:', res[1]?.data);
      
      if (res[1]?.data?.state === 'success') {
        // 保存token
        uni.setStorageSync("token", JSON.stringify(res[1].data.token));
        
        // 获取用户信息
        await this.getUserInfo();
        
        return {
          success: true,
          token: res[1].data.token,
          msg: res[1].data.msg
        };
      } else {
        // 处理错误响应
        const errorMsg = res[1]?.data?.error || res[1]?.data?.msg || '登录失败';
        console.log('🔍 错误信息:', errorMsg);
        
        return {
          success: false,
          error: errorMsg
        };
      }
    } catch (error) {
      console.error('Go API 签名登录失败:', error);
      return {
        success: false,
        error: error.message || '登录失败'
      };
    }
  }

  // Go API 获取用户信息
  // async goGetUserInfo() {
  //   try {
  //     const data = {};
  //     const opts = {
  //       url: '/user/GetUserInfo',
  //       method: 'GET'
  //     };
      
  //     const res = await goApi.goHttpTokenRequest(opts, data);
  //     // console.log('go API用户信息',res);
  //     if (res[1].data.state === 'success') {
		  
  //       const userInfo = res[1].data.user;
  //       this.currentUser = userInfo;
  //       uni.setStorageSync('userinfo', userInfo);
  //       // 如果用户信息中包含yqm字段，直接设置邀请码
  //       if (userInfo && userInfo.yqm) {
  //         this.inviteCode = userInfo.yqm;
  //         uni.setStorageSync('yqm', this.inviteCode);
  //       }
        
  //       return {
  //         success: true,
  //         userInfo: userInfo
  //       };
  //     } else {
  //       return {
  //         success: false,
  //         error: res[1].data.msg || '获取用户信息失败'
  //       };
  //     }
  //   } catch (error) {
  //     console.error('Go API 获取用户信息失败:', error);
  //     return {
  //       success: false,
  //       error: error.message || '获取用户信息失败'
  //     };
  //   }
  // }

  // Go API 验证token
  async goVerifyToken() {
    try {
      const data = {};
      const opts = {
        url: '/api/verify',
        method: 'GET'
      };
      
      const res = await goApi.goHttpTokenRequest(opts, data);
      
      if (res[1].data.state === 'success') {
        return {
          success: true,
          tokenInfo: res[1].data
        };
      } else {
        return {
          success: false,
          error: res[1].data.msg || 'Token验证失败'
        };
      }
    } catch (error) {
      console.error('Go API Token验证失败:', error);
      return {
        success: false,
        error: error.message || 'Token验证失败'
      };
    }
  }
}

// 创建单例实例
const userService = new UserService();

export default userService;
